﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlServerCe;
using System.Data.SqlTypes;
using System.Windows.Forms;

namespace prova
{
    class AlumneConversor : Alumne
    {
        /*
         *carrega un alumnea partir de la base de dades.
         *Carrega l'alumne amb ID = a la propietat id.
         */
        public void load()
        {
            if (this.Nmatricula < 0)
            {
                throw new Exception("error el número de matricula ha de ser superior a 0");

            }

            SqlCeConnection con = BaseDades.connectar();
            con.Open();

            String sql = "SELECT Nmatricula, Nom, Cognom " +
                         "FROM Alumnes " +
                         "WHERE Nmatricula = @Nmatricula";
            SqlCeCommand c = new SqlCeCommand(sql, con);
            c.Parameters.Add("@Nmatricula", this.Nmatricula);
            SqlCeDataReader dr = c.ExecuteReader();
            if (dr.Read())
            {
                this.Nom = dr["Nom"].ToString();
                this.Cognom = dr["Cognom"].ToString();
            }
            else
            {
                MessageBox.Show("No s'han pogut lleguir les dades" + 
                                 " comprova que has seleccionat un usuari");
            }
            

        }

        /*
         * guarda l'alumne amb id a la base de dades
         */
        public void insert()
        {
            if (this.Nmatricula<0)
            {
                throw new Exception("error el número de matricula ha de ser superior a 0");

            }
            SqlCeConnection con = BaseDades.connectar();
            con.Open();

            String sql = "INSERT INTO Alumnes" + 
                        " (Nmatricula, Nom, Cognom) " +
                        " VALUES (@Nmatricula, @Nom, @Cognom)";
            SqlCeCommand c = new SqlCeCommand(sql, con);
            c.Parameters.Add("@Nmatricula", System.Data.SqlDbType.Int);
            c.Parameters.Add("@Nom", System.Data.SqlDbType.NVarChar, 50);
            c.Parameters.Add("@Cognom", System.Data.SqlDbType.NVarChar, 50);
            c.Parameters["@Nmatricula"].Value = this.Nmatricula;
            c.Parameters["@Nom"].Value = this.Nom;
            c.Parameters["@Cognom"].Value = this.Cognom;
            //per preparar la consulta per tornar a executar amb altres parametres
            c.Prepare();

            if (c.ExecuteNonQuery() == 0)
            {
                throw new Exception("Error al executar l'sql: " + sql);
            }

            con.Close();
        }

        public void update()
        {
            if (this.Nmatricula < 0)
            {
                throw new Exception("error el número de matricula ha de ser superior a 0");

            }
            SqlCeConnection con = BaseDades.connectar();
            con.Open();

            String sql = "UPDATE Alumnes SET " +
                         "Nom = @Nom, " +
                         "Cognom = @Cognom " +
                         "WHERE Nmatricula = @Nmatricula;";
            SqlCeCommand c = new SqlCeCommand(sql, con);
            c.Parameters.Add("@Nmatricula", System.Data.SqlDbType.Int);
            c.Parameters.Add("@Nom", System.Data.SqlDbType.NVarChar, 50);
            c.Parameters.Add("@Cognom", System.Data.SqlDbType.NVarChar, 50);
            c.Parameters["@Nmatricula"].Value = this.Nmatricula;
            c.Parameters["@Nom"].Value = this.Nom;
            c.Parameters["@Cognom"].Value = this.Cognom;
            //per preparar la consulta per tornar a executar amb altres parametres
            c.Prepare();
            Console.WriteLine(sql);
            

            if (c.ExecuteNonQuery() == 0)
            {
                throw new Exception("Error al executar l'sql: " + sql);
            }

            con.Close();
        }
    }
}
